import { getUserInfoApi, loginApi, getUserDatailByIdApi } from '@/api/user'
import { setToken, getToken, removeToken } from '@/utils/auth'
import { resetRouter } from '@/router'
// import store from '..'
const state = {
  token: getToken() || '', // Cookies 用法：这里是因为封装的那边(utils/auth.js)已经传好了key值，这里就不用传了
  // token: localStorage.getItem('mh-Token') || ''  // localStorage 的用法
  userInfo: {}
}
const mutations = {
  setToken(state, data) {
    state.token = data
    setToken(data)// Cookies 用法：这里是因为封装的那边(utils/auth.js)已经传好了key值，这里就不用传了key值，直接传参数就行
    // localStorage.setItem('mh-Token', data) // localStorage 的用法
  },
  setUserInfo(state, data) {
    state.userInfo = data
  },

  // 登出需求
  removeToken(state) {
    state.token = ''
    // 这里调用自己是为了不让刷新页面就回去，为了删除本地的
    removeToken()
  },
  removeUserInfo(state) {
    state.userInfo = {}
  }
}
const actions = {
  // 将登录逻辑封装到 vuex action 里面
  // 这里的 login 是action的方法，loginApi 就是我们封装的登录请求
  // login(store, data) {
  //   loginApi(data).then(res => {
  //     console.log(15, res)
  //     store.commit('setToken', res.data.data)
  //   })
  // }

  // 这是 async await 的写法
  async login(store, data) { // async await 的写法：这里就要加 async
    const res = await loginApi(data)// async await 的写法：这里就得加 await
    // console.log(23, res)
    // 在响应拦截器中结构了data(res.data.data)，所有在这边就不用用res.data.data 直接用res就行
    store.commit('setToken', res)

    // 为了之后发请求可以主动校验是否已经失效，记录当前的登录
    localStorage.setItem('loginTime', Date.now())
  },

  // 获取用户基本信息
  async getUserInfo(store) {
    // 将请求封装在这
    const res = await getUserInfoApi()
    // 默认当前账号基本信息数据不足
    // 需要另外一个员工数据接口进行补充
    const detail = await getUserDatailByIdApi(res.userId)
    store.commit('setUserInfo', {
      ...res,
      ...detail
    })
  },

  // 这是登出需求
  logout(store) {
    store.commit('removeToken')
    store.commit('removeUserInfo')
    resetRouter()
  }
}

export default {
  namespaced: true,
  mutations,
  state,
  actions
}
